using System;

namespace Dida
{
	[AttributeUsage(AttributeTargets.Method)]
	public class TraitImplementMethodAttribute : Attribute
	{
		private bool needsDeclaration = true;

		public bool NeedsDeclaration
		{
			set { needsDeclaration = value; }
			get { return needsDeclaration; }
		}
	}

	public enum TraitMethodAcceptance
	{
		SingleImplementation,
		MultipleImplementations,
	}

	public enum TraitMethodRequirement
	{
		MustImplement,
		Optional,
	}

	[AttributeUsage(AttributeTargets.Method)]
	public class TraitDeclareMethodAttribute : Attribute
	{
		private TraitMethodAcceptance acceptance;
		
		public TraitDeclareMethodAttribute(TraitMethodAcceptance acceptance)
		{
			this.acceptance = acceptance;
		}

		public TraitMethodAcceptance Acceptance
		{
			get { return acceptance; }
		}
	}

	public enum TraitPropertyScope
	{
		Class,
		Trait,
		Scoped,
	}

	[AttributeUsage(AttributeTargets.Property)]
	public class TraitPropertyAttribute : Attribute
	{
		private TraitPropertyScope scope;

		public TraitPropertyAttribute(TraitPropertyScope scope)
		{
			this.scope = scope;
		}

		public TraitPropertyScope Scope
		{
			get { return scope; }
		}
	}
}